<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="en" xml:lang="en" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<head>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Task: Outline the Architecture</title>
<meta name="uma.type" content="Task">
<meta name="uma.name" content="outline_the_arch">
<meta name="uma.presentationName" content="Outline the Architecture">
<meta name="uma.category" content="Discipline:architecture_discipline:Architecture">
<meta name="element_type" content="activity">
<meta name="filetype" content="description">
<meta name="role" content="">
<link rel="StyleSheet" href="./../../css/default.css" type="text/css">
<script src="./../../scripts/ContentPageResource.js" type="text/javascript" language="JavaScript"></script><script src="./../../scripts/ContentPageSection.js" type="text/javascript" language="JavaScript"></script><script src="./../../scripts/ContentPageSubSection.js" type="text/javascript" language="JavaScript"></script><script src="./../../scripts/ContentPageToolbar.js" type="text/javascript" language="JavaScript"></script><script src="./../../scripts/contentPage.js" type="text/javascript" language="JavaScript"></script><script type="text/javascript" language="JavaScript">
					var backPath = './../../';
					var imgPath = './../../images/';
					var nodeInfo=null;
					contentPage.preload(imgPath, backPath, nodeInfo, '', true, false, false);
				</script>
</head>
<body>
<div id="breadcrumbs"></div>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td valign="top">
<div id="page-guid" value="_0f-1oMlgEdmt3adZL5Dmdw"></div>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td class="pageTitle" nowrap="true">Task: Outline the Architecture</td><td width="100%">
<div align="right" id="contentPageToolbar"></div>
</td><td width="100%" class="expandCollapseLink" align="right"><a name="mainIndex" href="./../../index.htm"></a><script language="JavaScript" type="text/javascript" src="./../../scripts/treebrowser.js"></script></td>
</tr>
</table>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="pageTitleSeparator"><img src="./../../images/shim.gif" alt="" title="" height="1"></td>
</tr>
</table>
<div class="overview">
<table width="97%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="50"><img src="./../../images/task.gif" alt="" title=""></td><td>
<table class="overviewTable" border="0" cellspacing="0" cellpadding="0">
<tr>
<td valign="top">This task is where the &quot;vision&quot; for the architecture is developed through analysis of the architecturally significant requirements and identification of architectural constraints, decisions and objectives.</td>
</tr>
<tr>
<td>Disciplines: <a href="./../../core.default.cat_def.base/disciplines/architecture_discipline_3A224435.html" guid="_iGSHsFZ-EdyIUdvDLLUdeg">Architecture</a></td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div class="sectionHeading">Purpose</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td class="sectionTableSingleCell"><p>
    To outline a technical approach to the system that supports the project requirements, within the constraints placed on
    the system and the development team.
</p>
<p>
    To provide sufficient guidance and direction for the team to begin development.
</p></td>
</tr>
</table>
</div>
<div class="sectionHeading">Relationships</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<th class="sectionTableHeading" scope="row">Roles</th><td class="sectionTableCell" width="42%"><span class="sectionTableCellHeading">Primary Performer:
								</span>
<ul>
<li>
<a href="./../../core.default.role_def.base/roles/architect_E7A12309.html" guid="_0X9iEMlgEdmt3adZL5Dmdw">Architect</a>
</li>
</ul>
</td><td class="sectionTableCell"><span class="sectionTableCellHeading">Additional Performers:
								</span>
<ul>
<li>
<a href="./../../core.default.role_def.base/roles/analyst_39D7C49B.html" guid="_0VxJsMlgEdmt3adZL5Dmdw">Analyst</a>
</li>
<li>
<a href="./../../core.default.role_def.base/roles/developer_C633AB7.html" guid="_0YDosMlgEdmt3adZL5Dmdw">Developer</a>
</li>
<li>
<a href="./../../core.default.role_def.base/roles/project_manager_E657F936.html" guid="_0a0o0MlgEdmt3adZL5Dmdw">Project Manager</a>
</li>
<li>
<a href="./../../core.default.role_def.base/roles/stakeholder_9FFD4106.html" guid="_dTa6gMAYEdqX-s4mWhkyqQ">Stakeholder</a>
</li>
</ul>
</td>
</tr>
<tr valign="top">
<th class="sectionTableHeading" scope="row">Inputs</th><td class="sectionTableCell" width="42%"><span class="sectionTableCellHeading">Mandatory:
								</span>
<ul></ul>
<ul>
<li>
<a href="./../../core.tech.slot.base/workproducts/technical_specification_slot_2812F7EF.html" guid="_i3vkoLS-EduDY8LNbMCDBA">[Technical Specification]</a>
<ul>
<li>
<a href="./../../core.gen.common.base/workproducts/glossary_5D300778.html" guid="_Wn7HcNcEEdqz_d2XWoVt6Q">Glossary</a>
</li>
<li>
<a href="./../../core.tech.common.extend_supp/workproducts/system_wide_requirements_7D9DD47C.html" guid="_BVh9cL-CEdqb7N6KIeDL8Q">System-WideRequirements</a>
</li>
<li>
<a href="./../../core.tech.common.extend_supp/workproducts/use_case_22BE66E2.html" guid="_0VGbUMlgEdmt3adZL5Dmdw">Use Case</a>
</li>
<li>
<a href="./../../core.tech.common.extend_supp/workproducts/use_case_model_85965D1B.html" guid="_W2SgEDR5EdutE_HNDTJk5Q">Use-Case Model</a>
</li>
<li>
<a href="./../../core.tech.common.extend_supp/workproducts/vision_2E71B03C.html" guid="_0WVxcMlgEdmt3adZL5Dmdw">Vision</a>
</li>
</ul>
</li>
</ul>
</td><td class="sectionTableCell"><span class="sectionTableCellHeading">Optional:
								</span>
<ul>
<li>
<a href="./../../practice.tech.evolutionary_arch.base/workproducts/architecture_notebook_9BB92433.html" guid="_0XAf0MlgEdmt3adZL5Dmdw">Architecture Notebook</a>
</li>
</ul>
<ul></ul>
</td>
</tr>
<tr valign="top">
<th class="sectionTableHeading" scope="row">Outputs</th><td class="sectionTableCell" colspan="2">
<ul>
<li>
<a href="./../../practice.tech.evolutionary_arch.base/workproducts/architecture_notebook_9BB92433.html" guid="_0XAf0MlgEdmt3adZL5Dmdw">Architecture Notebook</a>
</li>
</ul>
<ul></ul>
</td>
</tr>
</table>
</div>
<div class="sectionHeading">Main Description</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td class="sectionTableSingleCell"><p>
    This task focuses on outlining the initial architectural decisions that will guide development and testing. It relies
    on gathering experience gained in similar systems or problem domains to constrain and focus the architecture so that
    effort is not wasted in re-inventing architecture.
</p>
<p>
    The results are captured for future reference and are communicated across the team. It is important that the team has
    enough information to understand the technical approach being taken.
</p>
<p>
    The architecture evolves organically over time by outlining and refining portions of it. A few people get together in a
    room and sketch out what they think the architecture will be. This envisioning effort sets the foundation for
    prototyping. If the solution is similar to a previously produced solution (or is a well-known solution domain), then it
    will probably be good enough to reference that example as evidence of the feasibility of the approach. In some cases,
    it may be necessary to develop one or more prototypes to validate some of the decisions or clarify some of the
    requirements.
</p>
<p>
    The work done here does not seek to produce a detailed and comprehensive technical specification for the system.
    Rather, the approach should be to decide the overall technical approach at a high level. The conclusion of this work
    should produce just enough information to communicate the architecture to the team, and to demonstrate its viability to
    the customer. This allows the project to move forward, enabling you to refine and baseline the architecture.
</p></td>
</tr>
</table>
</div>
<div class="sectionHeading">Steps</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="sectionTableSingleCell">
<div class="stepHeading">Identify architectural goals</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td><p>
    Work with the team to describe the remaining goals for the architecture and identify which ones are appropriate to
    address for this iteration.&nbsp;Look at&nbsp;the requirements and speak to the people asking for them to
    make&nbsp;sure that the&nbsp;critical goals for this iteration are well understood. These goals will prioritize and
    guide the approach to important technical decisions.<br />
</p>
<p>
    It's important to regularly review the status of these goals throughout the project to make sure that they are still
    valid and that the system is on track to deliver them.
</p>
<p>
    For more information, see <a class="elementLinkWithType" href="./../../core.tech.common.extend_supp/guidances/concepts/arch_goals_CB41D8AE.html" guid="_HlRqANpbEdyP58ppo1Ieaw">Concept: Architectural Goals</a>.
</p></td>
</tr>
</table>
</div>
<div class="stepHeading">Identify architecturally significant requirements</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td><p>
    Identify which of the current requirements are architecturally significant.&nbsp;Explore and refine those that must be
    implemented in order to realize the architectural goals for the current iteration. See <a class="elementLinkWithType" href="./../../core.tech.common.extend_supp/guidances/concepts/arch_significant_requirements_1EE5D757.html" guid="_HrZGIA4MEduibvKwrGxWxA">Concept: Architecturally Significant Requirements</a>&nbsp;for more information.
</p></td>
</tr>
</table>
</div>
<div class="stepHeading">Identify constraints on the architecture</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td><p>
    List any constraints on the architecture and any trade-offs between competing requirements and resources. Decide how
    the architecture will meet these issues. Justify each of the decisions made and capture this information. Regularly
    review the list of constraints to make sure that they are still valid and that no new ones have appeared.<br />
</p>
<p>
    For more information, see <a class="elementLinkWithType" href="./../../core.tech.common.extend_supp/guidances/concepts/arch_constraints_AE56B662.html" guid="_jdKSsNpiEdyP58ppo1Ieaw">Concept: Architectural Constraints</a>.
</p></td>
</tr>
</table>
</div>
<div class="stepHeading">Identify key abstractions</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td><p>
    Identify the key concepts and abstractions that the system needs to handle. The requirements are good sources for key
    abstractions.&nbsp; Don't spend too much time describing&nbsp;abstractions in detail at this initial stage, because
    there is a risk that spending too much time will result in identifying classes and relationships that the solution does
    not actually need.
</p>
<p>
    When&nbsp;identifying&nbsp;key abstractions, it can be useful to also define any obvious relationships that exist
    between them.&nbsp;These can be captured in a table or&nbsp;in diagrams (in a tool or whiteboard.&nbsp;In general, it
    is not worth agonizing over defining a highly detailed set of relationships at this early stage in design. The
    relationships will become more concrete and detailed later and will&nbsp;probably modify&nbsp;these
    early&nbsp;assumptions.&nbsp;
</p>
<p>
    For more information, see <a class="elementLinkWithType" href="./../../core.tech.common.extend_supp/guidances/concepts/key_abstractions_1474DBF2.html" guid="_pLEGUNqGEdy88NBoQgfGyg">Concept: Key Abstractions</a>.
</p></td>
</tr>
</table>
</div>
<div class="stepHeading">Identify reuse opportunities</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td><p>
    Survey, assess, and select available assets.&nbsp; Identify assets from other areas that may be reused in the current
    architecture. For more information, see <a class="elementLinkWithType" href="./../../core.tech.common.extend_supp/guidances/guidelines/software_reuse_B6B04C26.html" guid="_vO2uoO0OEduUpsu85bVhiQ">Guideline: Software Reuse</a>.
</p></td>
</tr>
</table>
</div>
<div class="stepHeading">Define approach for partitioning the system</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td><p>
    Decide how to partition the software, both in logical and physical terms. Partitioning your system helps you manage its
    complexity by using the well-known "divide and conquer" strategy. By breaking the process into smaller and more
    manageable pieces, you make development easier.
</p>
<p>
    As a minimum, decide on:
</p>
<ul>
    <li>
        How to partition the software when managing development (the use of layering as a partitioning strategy, for
        example).&nbsp; For more information, see <a class="elementLinkWithType" href="./../../core.tech.common.extend_supp/guidances/guidelines/layering_F169CF07.html" guid="_0gpkAMlgEdmt3adZL5Dmdw">Guideline: Layering</a>.
    </li>
    <li>
        How the software will be composed at run time.
    </li>
</ul>
<p>
    For each software partition, briefly describe
</p>
<ul>
    <li>
        Its name and purpose.
    </li>
    <li>
        Its relationships to other partitions.
    </li>
</ul>
<p>
    At this point, you do not need to identify the elements that should be placed in each of these partitions.&nbsp;
    Instead, you define how many partitions you will need and how they should be related. Later, during&nbsp;design
    activities, you decide which elements will populate these partitions.
</p></td>
</tr>
</table>
</div>
<div class="stepHeading">Define approach for deploying the system</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td><p>
    Outline how the software will deploy over the nodes on the network. Work with stakeholders such as network support and
    deployment teams to ensure that the proposed approach is a good fit for the wider technical environment.
</p></td>
</tr>
</table>
</div>
<div class="stepHeading">Identify architectural mechanisms</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td><p>
    Make a list of the&nbsp;technical services that the system needs to provide and capture some basic information about
    each item on the list. It's generally a good idea to make an initial&nbsp;list of all the mechanisms required for the
    project and then prioritize the development of those that need to be&nbsp;delivered to achieve the architectural goals.
</p>
<p>
    At this point, usually only the analysis mechanisms are defined.&nbsp; However, specific <a class="elementLink" href="./../../core.tech.common.extend_supp/guidances/concepts/arch_constraints_AE56B662.html" guid="_jdKSsNpiEdyP58ppo1Ieaw">Architectural Constraints</a>&nbsp;may mean that some of those mechanisms can be
    described as design mechanisms (even at this early stage).
</p>
<p>
    For more information on architectural mechanisms, see <a class="elementLinkWithType" href="./../../core.tech.common.extend_supp/guidances/concepts/arch_mechanism_2932DFB6.html" guid="_mzxI0A4LEduibvKwrGxWxA">Concept: Architectural Mechanism</a>.&nbsp;
</p></td>
</tr>
</table>
</div>
<div class="stepHeading">Identify interfaces to external systems</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td><p>
    At this point, identify the external systems with which this system must interact.&nbsp; An external system may be
    anything from software to hardware units that the current system will use, such as printers, terminals, alarm devices,
    and sensors.
</p>
<p>
    Describe those interfaces at a high level, concentrating on the information that must pass between the systems.
</p></td>
</tr>
</table>
</div>
<div class="stepHeading">Verify architectural consistency</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td>Work with the team&nbsp;to verify that the architecture is consistent with the requirements and that the descriptions of
the architecture are complete, meaningful, and clear.</td>
</tr>
</table>
</div>
<div class="stepHeading">Capture and communicate architectural decisions </div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td>Capture important decisions about the architecture in the <a class="elementLink" href="./../../practice.tech.evolutionary_arch.base/workproducts/architecture_notebook_9BB92433.html" guid="_0XAf0MlgEdmt3adZL5Dmdw">Architecture Notebook</a>&nbsp;for future reference. Make sure that&nbsp;the team
understands the architecture&nbsp;and can deliver it.</td>
</tr>
</table>
</div>
</td>
</tr>
</table>
</div>
<div class="sectionHeading">Key Considerations</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td class="sectionTableSingleCell"><p>
    It&nbsp;is important to reduce the complexity of the&nbsp;solution by raising the levels of abstraction.&nbsp; For more
    information, see <a class="elementLinkWithType" href="./../../core.tech.common.extend_supp/guidances/guidelines/abstract_away_complexity_DBF13AE6.html" guid="_we3F4ACpEdu8m4dIntu6jA">Guideline: Abstract Away Complexity</a>.
</p>
<p>
    It is critical that this task be performed collaboratively with active involvement of other team members and project
    stakeholders so that consensus and common understanding is reached. It is particularly vital to involve the
    developer(s) throughout this task. The architecture effort&nbsp;is about providing leadership and coordination of the
    technical work rather than putting in a solo performance.
</p><p/><p>
    At this stage, you may find it useful to develop a draft version of your architectural models.&nbsp; For more
    information, see <a class="elementLinkWithType" href="./../../practice.tech.evolutionary_arch.base/guidances/guidelines/modeling_the_arch_8BE6E55B.html" guid="_HrgUQNcuEdy1nJEYZGzN4A">Guideline: Modeling the Architecture</a>.
</p></td>
</tr>
</table>
</div>
<div class="sectionHeading">Alternatives</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td class="sectionTableSingleCell"><p>
    This task&nbsp;is most&nbsp;needed when developing new and unprecedented systems. In systems where there is already a
    well-defined architecture, this task may be omitted and replaced with a&nbsp;review of the existing architecture.
</p></td>
</tr>
</table>
</div>
<div class="sectionHeading">More Information</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<th class="sectionTableHeading" scope="row">Concepts</th><td class="sectionTableCell">
<ul>
<li>
<a href="./../../core.tech.common.extend_supp/guidances/concepts/arch_constraints_AE56B662.html" guid="_jdKSsNpiEdyP58ppo1Ieaw">Architectural Constraints</a>
</li>
<li>
<a href="./../../core.tech.common.extend_supp/guidances/concepts/arch_goals_CB41D8AE.html" guid="_HlRqANpbEdyP58ppo1Ieaw">Architectural Goals</a>
</li>
<li>
<a href="./../../core.tech.common.extend_supp/guidances/concepts/arch_significant_requirements_1EE5D757.html" guid="_HrZGIA4MEduibvKwrGxWxA">Architecturally Significant Requirements</a>
</li>
<li>
<a href="./../../core.tech.common.extend_supp/guidances/concepts/arch_mechanism_2932DFB6.html" guid="_mzxI0A4LEduibvKwrGxWxA">Architectural Mechanism</a>
</li>
<li>
<a href="./../../core.tech.common.extend_supp/guidances/concepts/key_abstractions_1474DBF2.html" guid="_pLEGUNqGEdy88NBoQgfGyg">Key Abstractions</a>
</li>
</ul>
</td>
</tr>
<tr valign="top">
<th class="sectionTableHeading" scope="row">Guidelines</th><td class="sectionTableCell">
<ul>
<li>
<a href="./../../core.tech.common.extend_supp/guidances/guidelines/abstract_away_complexity_DBF13AE6.html" guid="_we3F4ACpEdu8m4dIntu6jA">Abstract Away Complexity</a>
</li>
<li>
<a href="./../../core.tech.common.extend_supp/guidances/guidelines/layering_F169CF07.html" guid="_0gpkAMlgEdmt3adZL5Dmdw">Layering</a>
</li>
<li>
<a href="./../../practice.tech.evolutionary_arch.base/guidances/guidelines/modeling_the_arch_8BE6E55B.html" guid="_HrgUQNcuEdy1nJEYZGzN4A">Modeling the Architecture</a>
</li>
<li>
<a href="./../../core.tech.common.extend_supp/guidances/guidelines/software_reuse_B6B04C26.html" guid="_vO2uoO0OEduUpsu85bVhiQ">Software Reuse</a>
</li>
</ul>
</td>
</tr>
</table>
</div>
<table class="copyright" border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="copyright"><p> This program and the accompanying materials are made available under the<br />
  <a href="http://www.eclipse.org/org/documents/epl-v10.php" target="_blank">Eclipse 
  Public License V1.0</a>, which accompanies this distribution. </p><p/><p> <a class="elementLink" href="./../../core.default.release_copyright.base/guidances/supportingmaterials/openup_copyright_C3031062.html" guid="_UaGfECcTEduSX6N2jUafGA">OpenUP Copyright</a></p></td>
</tr>
</table>
</td>
</tr>
</table>
</body>
<script type="text/javascript" language="JavaScript">
				contentPage.onload();
			</script>
</html>
